#ifndef CANIF_CAN_WRAPPER_H
#define CANIF_CAN_WRAPPER_H

#include "CanIf_Types.h"

#ifdef __cplusplus
extern "C" {
#endif

void canif_tx_confirmation(PduIdType can_tx_pdu_id);

#if defined(AUTOSAR_CANIF_VERSION_403)
void canif_rx_indication(Can_HwHandleType hrh, Can_IdType can_id, uint8 can_dlc, const uint8 *can_sdu_ptr);
#else
void canif_rx_indication(const Can_HwType *mailbox, const PduInfoType *pdu_info_ptr);
#endif

#if (defined(AUTOSAR_CANIF_VERSION_421)) || (defined(AUTOSAR_CANIF_VERSION_403))
void canif_controller_mode_indication(uint8 controller_id, canif_controller_mode_type controller_mode);
#else
void canif_controller_mode_indication(uint8 controller_id, Can_ControllerStateType controller_mode);
#endif

void canif_controller_bus_off(uint8 controller_id);

void CanIf_TxConfirmation(VAR(PduIdType, AUTOMATIC) canTxPduId);

#if defined(AUTOSAR_CANIF_VERSION_403)
void CanIf_RxIndication(VAR(Can_HwHandleType, AUTOMATIC) hrh, VAR(Can_IdType, AUTOMATIC) canId,
			VAR(uint8, AUTOMATIC) canDlc, P2VAR(uint8, AUTOMATIC, AUTOMATIC) canSduPtr);
#else
void CanIf_RxIndication(P2VAR(Can_HwType, AUTOMATIC, AUTOMATIC) Mailbox,
			P2VAR(PduInfoType, AUTOMATIC, AUTOMATIC) PduInfoPtr);
#endif

#if (defined(AUTOSAR_CANIF_VERSION_421)) || (defined(AUTOSAR_CANIF_VERSION_403))
void CanIf_ControllerModeIndication(VAR(uint8, AUTOMATIC) ControllerId,
				    VAR(CanIf_ControllerModeType, AUTOMATIC) ControllerMode);
#else
void CanIf_ControllerModeIndication(VAR(uint8, AUTOMATIC) ControllerId,
				    VAR(CanIf_ControllerModeType, AUTOMATIC) ControllerMode);
#endif

void CanIf_ControllerBusOff(VAR(uint8, AUTOMATIC) ControllerId);

#ifdef __cplusplus
}
#endif

#endif /* CANIF_CAN_WRAPPER_H */